package com.zxd.proxy;

import java.lang.reflect.Proxy;

/**
 * ClassName:ProxyUtil
 * Package:com.zxd.proxy
 *
 * @Date:2023/10/8 15:44
 * @Author:zxde
 */
public class ProxyUtil {
    public static Star createStarProxy(Star star) {

        /**
         * ClassLoader loader,        //ProxyUtil.class.getClassLoader()
         * Class<?>[] interfaces,     //需要被代理的方法声明在这个接口中
         * InvocationHandler h        //需要添加的内容在这个方法中写
         */
        return (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),
                new Class[]{Star.class},
                /**
                 * Yang yangProxy = (Yang)ProxyUtil.create(Yang)
                 * yangProxy.sing()
                 * proxy封装的是代理对象
                 * method是当前调用的方法
                 * args是调用的参数
                 */
                (proxy, method, args) -> {
                    if (method.getName() == "sing") {
                        System.out.println("唱歌前置工作");
                    } else if (method.getName() == "dance") {
                        System.out.println("跳舞前置工作");
                    }
                    return method.invoke(star, args);
                });

    }
}
